iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
生成式 AI

LLM 應用、開發框架、RAG優化及評估方法 系列 第 9

Day9 GAI爆炸時代 - LCEL 進階介紹

  • 分享至 

  • xImage
  •  

分支與合併

將多個不同的prompt template 與 chain整合使用

# 先定義好兩個runnable (兩個HumanMessage)
person = ChatPromptTemplate.from_template("是誰發行{invention}?")
country = ChatPromptTemplate.from_template("{person}來自哪個國家?")

# 一起加入到chain中
person_chain = ({"invention":RunnablePassthrough()} | person | chat_model | str_parser)

person_summary_chain = ({'person':person_chain} | country |chat_model | str_parser)

person_summary_chain.invoke("珍珠奶茶")

珍珠奶茶起源於台灣。這種飲品在1980年代的台灣誕生,並迅速成為一種受歡迎的飲品,隨後風靡全球。無論是台中的春水堂還是台南的翰林茶館,它們都為珍珠奶茶的發展和普及做出了貢獻。

from langchain_core.output_parsers import JsonOutputParser

# 初始化 JSON 解析器並獲取格式指示。這會讓 prompt2 知道如何格式化輸出
json_parser = JsonOutputParser()
format_instructions = json_parser.get_format_instructions()
# 定義提示模板
prompt1 = ChatPromptTemplate.from_template("請根據{attribute}特性,推薦一種環保的再生能源。請僅提供能源的名稱:")

prompt2 = ChatPromptTemplate.from_template(
    "在永續發展中,{energy}能源通常用於製造哪種環保材料?請僅提供能源材料的名稱:{format_instructions}" 
)

prompt3 = ChatPromptTemplate.from_template(
    "假設每個國家的能源發展是相等的,哪個國家使用{energy}能源可以做得最好?"
    "請僅提供國家/地區名稱:"
)
prompt4 = ChatPromptTemplate.from_template(
    "請結合{material}和{country},描述一個環境友善的未來生活場景。"
)
from langchain_core.runnables import RunnablePassthrough

prompt2 = prompt2.partial(format_instructions=format_instructions) # 將 format_instructions 部分應用到 prompt2,以確保輸出格式正確

# 將聊天模型與字符串解析器串聯,確保聊天模型的輸出可以被解析為字符串
model_parser = chat_model | str_parser

# 能源生成鏈 (先將收到的attribute丟給prompt1得到結果,得到 能源 的名稱 => 已解決prompt1,再丟給prompt2)
energy_generator = ({"attribute":RunnablePassthrough()} | prompt1 | {"energy":model_parser}) # 太陽能

# 能源材料(得到 能源材料 的名稱): 將 prompt2 的輸出經過聊天模型處理後,使用 JSON 解析器解析輸出
energy_to_material = prompt2 | chat_model | json_parser 

# 定義新的 lambda 函數來處理沒有 'energy_material' 的情況
def extract_material(x):
    return x.get('energy_material', next(iter(x.values())))

"""
定義 extract_material 函數。該函數首先嘗試從輸出中提取 energy_material 鍵的值。
如果 energy_material 不存在,它會提取輸出中的第一個鍵值

因為material_output會隨機產生key:

例如: 
material_output = {
    "energy_material": "綠氫"
}

或

material_output = {
    "其他鍵": "其他值"
}
這樣才可以避免沒讀到指定key值而造成錯誤發生
"""

# 能源使用做得最好的國家: 將 prompt3 的輸出經過聊天模型和字符串解析器處理
material_to_country = prompt3 | model_parser

# 結合: 將 energy_generator 的輸出傳遞給 energy_to_material 和 material_to_country,
# 確保 energy_to_material 的輸出存在 energy_material 鍵,否則提供一個預設值,最後將這些結果傳遞給 prompt4

question_generator = (
    energy_generator
    | {
        "material": energy_to_material | extract_material, 
        "country": material_to_country
    }
    | prompt4
)

# 最後生成問題
final_prompt = question_generator.invoke("零污染")
print(f"最終產生的問題:{final_prompt.messages[0].content}\n\n"
      f"AI 回答結果:{chat_model.invoke(final_prompt).content}")

最終產生的問題:請結合氫氣和澳大利亚,描述一個環境友善的未來生活場景。

AI 回答結果:在未來的一個環境友善生活場景中,澳大利亞成為全球領先的綠色能源典範,廣泛利用氫氣作為主要能源來源。以下是這個未來場景的詳細描述:

  1. 氫氣生產與儲存
    澳大利亞利用其豐富的太陽能和風能資源,建立了大量的可再生能源發電設施。這些設施通過電解水產生綠氫,這種氫氣不僅清潔,而且生產過程中幾乎不排放溫室氣體。氫氣被儲存在先進的儲能設施中,包括高壓罐和固態儲氫技術,確保穩定的能源供應。

  2. 交通運輸
    城市和城鎮之間的交通系統全面實現了氫燃料電池車輛的普及。氫燃料電池汽車、巴士和卡車在道路上行駛,不僅運行安靜,且僅排放水。澳大利亞的主要城市如悉尼、墨爾本和布里斯班都建設了完善的氫氣加注站網絡,保證了車輛的高效運行。

  3. 家庭與工業應用
    居民家庭和商業建築物都安裝了氫燃料電池,這些電池能夠為家庭供電和供暖,並且可與太陽能板和風能發電設備無縫結合,形成一個自給自足的微電網系統。工業部門則利用氫氣作為清潔燃料,取代傳統的化石燃料,顯著減少了二氧化碳排放。

  4. 農業與環保
    澳大利亞的農業也受益於氫氣技術的發展。農場使用氫燃料電池拖拉機和灌溉系統,大幅降低了對化石燃料的依賴。氫氣技術還被應用於生物質轉化和廢物處理,實現了循環經濟的目標。

  5. 教育與研究
    各大學和研究機構積極參與氫氣科技的研究與開發。大量的科研資金和政策支持促進了新技術的創新,並培養了大量專業人才。澳大利亞成為全球氫氣技術的研究中心,吸引了來自世界各地的科學家和工程師。

  6. 社會影響
    環境友善的氫氣經濟帶來了顯著的社會變革。澳大利亞的人們享有更清新的空氣、更低的能源成本和更高的生活質量。氫氣產業的發展還創造了大量的就業機會,促進了經濟的可持續增長。

    總結來說,在這個未來場景中,氫氣技術的廣泛應用使得澳大利亞成為一個真正的綠色國家,不僅實現了能源系統的轉型,還帶來了環境、經濟和社會的多重益處。這樣的未來生活場景展示了可持續發展的無限可能性。


上一篇
Day8 GAI爆炸時代 - LCEL 介紹
下一篇
Day10 GAI爆炸時代 - LCEL 進階介紹
系列文
LLM 應用、開發框架、RAG優化及評估方法 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言